const path = require('path');
const resolve = (dir) => path.join(__dirname, dir);
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV);
const CompressionPlugin = require('compression-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;

// const projectName = process.env.BASE_URL
// 获取本机电脑IP
function getIPAdress() {
    let interfaces = require('os').networkInterfaces();
    for (var devName in interfaces) {
        var iface = interfaces[devName];
        for (var i = 0; i < iface.length; i++) {
            let alias = iface[i];
            if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
                return alias.address
            }
        }
    }
}
module.exports = {
    // hash模式
    publicPath: './', // 基本路径
    outputDir: 'dist', // 输出文件目录
    // hsitory模式
    // publicPath: projectName,
    // outputDir: path.resolve(__dirname, 'dist'),
    assetsDir: 'static', // 放置生成的静态文件目录（js css img）
    // assetsDir: 'assets',
    productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
    lintOnSave: false, //是否开启eslint保存检测 ,它的有效值为 true || false || 'error'\
    devServer: {
        hot: true,
        open: IS_PROD, // 生产环境才使用浏览器自动打开
        https: false,
        // host: getIPAdress(),
        port: 8302,
        proxy: {
            // '/apis': {
            //     target: 'http://pv.sohu.com',//搜狐的域名
            //     ws: true,
            //     changOrigin: true,//允许跨域
            //     pathRewrite: {
            //         '^/apis': ''//请求的时候使用这个api就可以
            //     }
            // },
            // 匹配到/localApi开头时 替换成target指定的地址
            '/localApi1': {
                // 本地
                target: process.env.VUE_APP_SRC1,
                changeOrigin: process.env.NODE_ENV === 'development' ? true : false, // 开发环境才开启反向代理, 运行(生产)环境不开启
                secure: false,
                pathRewrite: {
                    // 把匹配到的/localApi这段开头 替换成 /api
                    '^/localApi1': '/api'
                        // '^/localApi1': '/'
                }
            },
            // 配置转发多个后端端口
            '/localApi2': {
                // 本地
                target: process.env.VUE_APP_SRC2,
                changeOrigin: process.env.NODE_ENV === 'development' ? true : false, // 开发环境才开启反向代理, 运行(生产)环境不开启
                secure: false,
                pathRewrite: {
                    // 把匹配到的/localApi这段开头 替换成 /api
                    '^/localApi2': '/api'
                        // '^/localApi2': '/'
                }
            },

            // 配置转发多个后端端口
            '/localApi3': {
                // 本地
                target: process.env.VUE_APP_SRC3,
                changeOrigin: process.env.NODE_ENV === 'development' ? true : false, // 开发环境才开启反向代理, 运行(生产)环境不开启
                secure: false,
                pathRewrite: {
                    // 把匹配到的/localApi这段开头 替换成 /api
                    '^/localApi3': '/api'
                        // '^/localApi3': '/'
                }
            },
            // 配置转发多个后端端口
            '/localApi4': {
                // 本地
                target: process.env.VUE_APP_SRC4,
                changeOrigin: process.env.NODE_ENV === 'development' ? true : false, // 开发环境才开启反向代理, 运行(生产)环境不开启
                secure: false,
                pathRewrite: {
                    // 把匹配到的/localApi这段开头 替换成 /api
                    '^/localApi4': '/'
                }
            },
            '/localApi5': {
                // 本地
                target: process.env.VUE_APP_SRC5,
                changeOrigin: process.env.NODE_ENV === 'development' ? true : false, // 开发环境才开启反向代理, 运行(生产)环境不开启
                secure: false,
                pathRewrite: {
                    // 把匹配到的/localApi这段开头 替换成 /api
                    '^/localApi5': '/'
                }
            }
        }
    },
    chainWebpack: config => {
        // 配置svg
        const svgRule = config.module.rule("svg");
        svgRule.uses.clear();
        svgRule.use("svg-sprite-loader")
            .loader("svg-sprite-loader")
            .options({
                symbolId: "icon-[name]"
            });
        // 添加别名
        config.resolve.alias
            .set('@', resolve('src'))
            .set('assets', resolve('src/assets'))
            .set('components', resolve('src/components'))
            .set('layout', resolve('src/layout'))
            .set('base', resolve('src/base'))
            .set('static', resolve('src/static'))
            .set('utils', resolve('src/utils'))
            .set('common', resolve('src/components/common'));

        if (process.env.NODE_ENV === 'production') {
            // 压缩代码 会产生 .gz和.js原文件 注释后只产生.js原文件
            // config.plugin('compressionPlugin')
            //     .use(new CompressionPlugin({
            //         filename: '[path].gz[query]',
            //         algorithm: 'gzip',
            //         test: productionGzipExtensions,
            //         threshold: 1024, // 这里单位为: b 字节  超过 1kb 的文件就进行压缩
            //         minRatio: 0.8,
            //         deleteOriginalAssets: false // 压缩后是否删除原资源 true 表示打包后 只保留.gz文件
            //     }));
        }
    },
    configureWebpack: config => {
        config['externals'] = {
            // "BMap": 'BMap',
            // "BMapLib": "BMapLib"
        }
        if (process.env.NODE_ENV === 'production') { // 为生产环境修改配置...
            // console.log(config)
            // 为生产环境修改配置...
            config.mode = "production";
            // 打包文件大小配置
            config["performance"] = {
                    // 入口起点的最大体积
                    "maxEntrypointSize": 10000000,
                    // 生成文件的最大体积
                    "maxAssetSize": 30000000
                }
                // 项目发布时去除console语句
            config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
            // config.optimization.minimizer = [
            //     new UglifyJsPlugin({
            //         uglifyOptions: {
            //             // 删除注释
            //             output: {
            //                 comments: false
            //             },
            //             // 删除console debugger 删除警告
            //             compress: {
            //                 warnings: false,
            //                 drop_console: true,//console
            //                 drop_debugger: false,
            //                 pure_funcs: ['console.log']//移除console
            //             }
            //         }
            //     })
            // ]

            // return {
            //     plugins: [new CompressionPlugin({
            //         test: /\.js$|\.html$|\.css/,
            //         threshold: 1024, // 这里单位为: b 字节  超过 1kb 的文件就进行压缩
            //         deleteOriginalAssets: false // 压缩后是否删除原文件。
            //     })]
            // }
        } else {
            // 为开发环境修改配置...
            config.mode = "development";
        }
    },
    pwa: {
        iconPaths: {
            favicon32: 'favicon.ico',
            favicon16: 'favicon.ico',
            appleTouchIcon: 'favicon.ico',
            maskIcon: 'favicon.ico',
            msTileImage: 'favicon.ico'
        }
    }
}